// #include <bits/stdc++.h>
#include<iostream>
#include<cstring>
using namespace std;
const int $=502;
const int ac=502*502+1;//小精灵代表的点
const int bc=502*502+2;//出口代表的点
int a[$][$];//地图
int pre[$*$+5];//并查集集合
int n, m, k;
int nextt[][2]= {0,1, 1,0, 0,-1, -1,0};//只有上下左右四个方向
int findd(int x)
{
    if(pre[x]!=x) return pre[x]=findd(pre[x]);
    else return x;
}
void unionn(int x, int y)
{
    int xx=findd(x);
    int yy=findd(y);
    if(xx!=yy)
        pre[xx]=yy;
}
void prework()
{
    memset(a, 0, sizeof(a));
    for(int i=0; i<$*$+5; i++)
    {
        pre[i]=i;
    }
}
void make(int u, int v)
{
    if(u==0||v==0||u==n-1||v==n-1)
    {
        unionn(u*501+v, bc);
    }
    for(int i=0; i<4; i++)
    {
        int xx=u+nextt[i][0];
        int yy=v+nextt[i][1];
        if(xx<0||yy<0||xx>=n||yy>=n) continue;
        if(a[xx][yy]==2)
        {
            unionn(xx*501+yy, u*501+v);
        }
        if(a[xx][yy]==1)
        {
            unionn(u*501+v, ac);
        }
    }
}
int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    prework();
    cin>>n>>m>>k;
    int ans=-1;
    for(int i=0; i<m; i++)
    {
        int u, v;
        cin>>u>>v;
        a[u][v]=1;
        if(u==0||v==0||u==n-1||v==n-1)
            ans=0;
    }
    for(int i=0; i<k; i++)
    {
        int u, v;
        cin>>u>>v;
        a[u][v]=2;
        if(ans!=-1) continue;
        make(u, v);
        if(findd(ac)==findd(bc))
        {
            ans=i+1;
        }
    }
    cout<<ans<<"\n";
    return 0;
}
